package com.m1.tzolkin.model;

import java.io.Serializable;

import com.m1.tzolkin.model.buildables.IMonument;
import com.m1.tzolkin.model.buildables.IZonedBuilding;
import com.m1.tzolkin.model.exceptions.NoAvailableSkullException;

/**
 * La banque est l'endroit o� sont stock�s les cr�nes de cristal,
 *  les b�timents, les monuments, etc... soit tous les objets
 *  pr�sents en quantit� limit�e dans le jeu.
 *  
 * @inv <pre>
 *     getSkulls () >= 0 </pre>
 *
 */
public interface IBank extends ObservableModel, Serializable {

	// REQUETES
	
	/**
	 * Retourne le nombre de cr�nes pr�sents dans la banque.
	 */
	int getSkulls();
	
	/**
	 * Retourne un b�timent (ferme ou b�timent d'action) de la zone courante
	 *  et le supprime de l'ensemble.
	 * Retourne null s'il n'y a plus de b�timents disponibles.
	 */
	IZonedBuilding getBuilding();
	
	/**
	 * Retourne un b�timent (ferme ou b�timent d'action) de la zone courante
	 *  et le supprime de l'ensemble.
	 * Retourne null s'il n'y a plus de b�timents disponibles.
	 */
	IMonument getMonument();
	
	// COMMANDES
	
	/**
	 * Retire 1 crane de la banque.
	 * @pre <pre>
	 *     getSkulls() > 0 </pre>
	 */
	void takeSkull() throws NoAvailableSkullException;
	
	/**
	 * Enclenche la seconde p�riode.
	 */
	void setSecondPeriod();
	
}
